#!/usr/bin/env python3
"""
简单的HTTP服务器，用于PWA应用
专为手机端优化的杂志图片管理器
"""

import http.server
import socketserver
import os
import webbrowser
import threading
import time
from pathlib import Path

class MyHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
    def end_headers(self):
        # 添加CORS头，支持跨域访问
        self.send_header('Access-Control-Allow-Origin', '*')
        self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
        self.send_header('Access-Control-Allow-Headers', 'Content-Type')
        
        # 添加PWA需要的头
        self.send_header('Service-Worker-Allowed', '/')
        
        # 缓存控制
        if self.path.endswith('.js') or self.path.endswith('.css'):
            self.send_header('Cache-Control', 'public, max-age=3600')
        elif self.path.endswith('.png') or self.path.endswith('.jpg') or self.path.endswith('.ico'):
            self.send_header('Cache-Control', 'public, max-age=86400')
        else:
            self.send_header('Cache-Control', 'no-cache, no-store, must-revalidate')
        
        super().end_headers()

def get_local_ip():
    """获取本地IP地址"""
    try:
        import socket
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(("8.8.8.8", 80))
        ip = s.getsockname()[0]
        s.close()
        return ip
    except:
        return "127.0.0.1"

def show_usage(port, local_ip):
    """显示使用说明"""
    print("\n" + "="*60)
    print("📱 杂志图片管理器 - PWA服务器已启动")
    print("="*60)
    print(f"🌐 本地访问：http://localhost:{port}/mobile-pwa.html")
    print(f"📱 手机访问：http://{local_ip}:{port}/mobile-pwa.html")
    print(f"🖥️  桌面版：http://localhost:{port}/")
    print("="*60)
    print("📋 手机使用步骤：")
    print("1. 确保手机和电脑在同一WiFi网络")
    print(f"2. 手机浏览器访问：http://{local_ip}:{port}/mobile-pwa.html")
    print("3. 点击浏览器菜单中的'添加到主屏幕'")
    print("4. 以后可以直接从主屏幕图标打开应用")
    print("="*60)
    print("⚠️  按 Ctrl+C 停止服务器")
    print("="*60 + "\n")

def main():
    # 设置端口
    PORT = 8080
    
    # 获取本地IP
    local_ip = get_local_ip()
    
    # 确保在正确的目录下运行
    os.chdir(os.path.dirname(os.path.abspath(__file__)))
    
    # 尝试启动服务器
    while True:
        try:
            with socketserver.TCPServer(("0.0.0.0", PORT), MyHTTPRequestHandler) as httpd:
                show_usage(PORT, local_ip)
                
                # 在新线程中打开浏览器
                def open_browser():
                    time.sleep(1)
                    webbrowser.open(f'http://localhost:{PORT}/mobile-pwa.html')
                
                threading.Thread(target=open_browser, daemon=True).start()
                
                # 启动服务器
                httpd.serve_forever()
                
        except OSError as e:
            if e.errno == 48:  # 端口被占用
                print(f"端口 {PORT} 被占用，尝试端口 {PORT + 1}")
                PORT += 1
                if PORT > 8090:  # 最多尝试10个端口
                    print("❌ 无法找到可用端口，请检查系统设置")
                    break
            else:
                print(f"❌ 启动服务器失败：{e}")
                break
        except KeyboardInterrupt:
            print("\n👋 服务器已停止")
            break
        except Exception as e:
            print(f"❌ 服务器运行错误：{e}")
            break

if __name__ == "__main__":
    main()